﻿using EBA.IoC;
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using EBA.Localization;
using System.Diagnostics;

namespace EBA.Aspects
{
    /// <summary>
    /// 拦截辅助方法。
    /// </summary>
    public static class Interceptors
    {
        /// <summary>
        /// 执行所有注入构造函数中的拦截对象。
        /// </summary>
        public static void OnPreClassInvoke(InterceptionContext context)
        {
            var attrs = context.Type.GetCustomAttributes(true).OfType<IPreClassInvoke>().ToList();

            foreach (var interceptor in attrs)
            {
                interceptor.Intercept(context);
            }
        }

        /// <summary>
        /// 执行所有注入到方法调用前的拦截对象。
        /// </summary>
        public static void OnPreMethodInvoke(InterceptionContext context)
        {
            var attrs = context.Method.GetCustomAttributes(true).OfType<IPreMethodInvoke>().ToList();
            //Console.WriteLine(context.Type);
            //Console.WriteLine(context.Method);

            foreach (var interceptor in attrs)
            {
                interceptor.Intercept(context);
            }
        }

        /// <summary>
        /// 执行所有注入到方法调用后的拦截对象。
        /// </summary>
        public static void OnPostMethodInvoke(InterceptionContext context)
        {
            var attrs = context.Method.GetCustomAttributes(true).OfType<IPostMethodInvoke>().ToList();

            foreach (var interceptor in attrs)
            {
                interceptor.Intercept(context);
            }
        }
    }
}
